package fileoperation

import (
	"bufio"
	"fmt"
	"os"
)

// 1. 创建文件，并输出文件信息
func CreateFile(filename string) (os.FileInfo, error) {
	file, err := os.Create(filename)
	if err != nil {
		return nil, err
	}
	defer file.Close()

	info, err := file.Stat()
	if err != nil {
		return nil, err
	}

	fmt.Printf("文件 %s 已创建，信息：%v\n", filename, info)
	return info, nil
}

// 2. 读取文件，并输出文件内容
func ReadFile(filename string) (string, error) {
	file, err := os.Open(filename)
	if err != nil {
		return "", err
	}
	defer file.Close()

	scanner := bufio.NewScanner(file)
	var content string

	for scanner.Scan() {
		line := scanner.Text()
		content += line + "\n"
		fmt.Println(line)
	}

	if err := scanner.Err(); err != nil {
		return "", err
	}

	return content, nil
}

// 3. 覆盖写入文件内容
func WriteToFile(filename, content string) error {
	file, err := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
	if err != nil {
		return err
	}
	defer file.Close()

	writer := bufio.NewWriter(file)
	_, err = writer.WriteString(content)
	if err != nil {
		return err
	}

	err = writer.Flush()
	if err != nil {
		return err
	}

	fmt.Printf("已将内容写入文件 %s\n", filename)
	return nil
}

// 4.新增：追加内容到文件末尾
func AppendToFile(filename, content string) error {
	file, err := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
	if err != nil {
		return err
	}
	defer file.Close()

	writer := bufio.NewWriter(file)
	_, err = writer.WriteString(content + "\n")
	if err != nil {
		return err
	}

	err = writer.Flush()
	if err != nil {
		return err
	}

	fmt.Printf("已将内容追加到文件 %s\n", filename)
	return nil
}

// 5. 删除文件
func DeleteFile(filename string) error {
	err := os.Remove(filename)
	if err != nil {
		return err
	}

	fmt.Printf("文件 %s 已删除\n", filename)
	return nil
}
